/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package ejercicio.practica2;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Scanner;

/**
 *
 * @author manolo
 */
public class Biblioteca {

    private static ArrayList<Paciente> listaPacientes = new ArrayList();
    private static Paciente paciente;

    public static void main(String[] args) throws IOException {
        int opcion;
        Scanner dato = new Scanner(System.in);

        do {
            System.out.println("");
            System.out.println("**********************************");
            System.out.println("Elija la función que desea evaluar");
            System.out.println("**********************************");
            System.out.println("");
            System.out.println("1.- Insertar paciente");
            System.out.println("2.- Eliminar paciente");
            System.out.println("3.- Consultar paciente");
            System.out.println("0.- Salir");
            opcion = dato.nextInt();
            switch (opcion) {
                case 1:
                    insertar();
                    break;
                case 2:
                    eliminar();
                    break;
                case 3:
                    consultar();
                    break;
                case 0:
                    System.exit(0);
                default:
                    System.out.println("La opción elegida no es válida");
                    ;
            }

        } while (opcion != 0);

    }

    private static void consultar() {
        int opcion, posicion;
        boolean encontrado = false;
        String nombre, dni;
        Paciente pacienteaBuscar = null;
        Scanner teclado = new Scanner(System.in);

            System.out.println("Consulta de datos de un paciente... ");
            System.out.println("");
            System.out.println("1.- Busqueda por nombre: ");
            System.out.println("2.- Busqueda por dni: ");
            System.out.println("0.- Salir");
            opcion = teclado.nextInt();
            teclado.nextLine();
            switch (opcion) {
                case 1:
                    System.out.println("Introduce el nombre del paciente: ");
                    nombre = teclado.nextLine();
                    posicion = buscaPacienteNombre(nombre);
                    if (posicion > -1) {
                        encontrado = true;
                        pacienteaBuscar = listaPacientes.get(posicion);
                        break;
                    } else {
                        encontrado = false;
                        System.out.println("El paciente " + nombre + " no existe");
                        break;
                    }
                case 2:
                    System.out.println("Introduce el dni del paciente: ");
                    dni = teclado.nextLine(); 
                    posicion = buscaPacienteDni(dni);
                    if (posicion > -1) {                        
                        encontrado = true;
                        pacienteaBuscar = listaPacientes.get(posicion);
                        break;
                    } else {
                        System.out.println("El paciente con dnie" + dni + " no existe");
                        break;
                    }
                case 3:
                    consultar();
                    break;
                case 0:
                    return;
                default:
                    System.out.println("La opción elegida no es válida");
                    ;
            }
            
        if(encontrado ==  true)
        {
        System.out.println(" ");
        System.out.println("Nombre del paciente: " + pacienteaBuscar.getNombre());
        System.out.println("Dni: " + pacienteaBuscar.getDni());
        System.out.println("Dirección: " + pacienteaBuscar.getDireccion());
        System.out.println("Telefono: " + pacienteaBuscar.getTelefono());
        System.out.println("Compañia de seguro: "  + pacienteaBuscar.getSeguro());
        }
    }

    private static void eliminar() {
        String dni;
        boolean borrado = false;
        int posicion;
        Scanner teclado = new Scanner(System.in);

        System.out.println("Eliminación de un paciente... ");
        System.out.println("Introduce el dni del paciente: ");
        dni = teclado.nextLine();

        posicion = buscaPacienteDni(dni);

        if (posicion > -1) {
            listaPacientes.remove(posicion);
            borrado = true;
        }

        if (borrado = true) {
            System.out.println("Paciente eliminado correctamente.");
        } else {
            System.out.println("El paciente no ha podido ser eliminado.");
        }

    }

    private static void insertar() {
        String nombre, dni, direccion, telefono, seguro;
        Scanner teclado = new Scanner(System.in);

        System.out.println("Alta de un nuevo paciente... ");
        System.out.println("Introduce el nombre del paciente: ");
        nombre = teclado.nextLine();
        System.out.println("Introduce el dni del paciente: ");
        dni = teclado.nextLine();
        System.out.println("Introduce la dirección del paciente: ");
        direccion = teclado.nextLine();
        System.out.println("Introduce el telefono del paciente: ");
        telefono = teclado.nextLine();
        System.out.println("Introduce la compañia de seguro del paciente: ");
        seguro = teclado.nextLine();
        try {
            // Crear el objeto paciente
            paciente = new Paciente(nombre, dni, direccion, seguro, telefono);
            boolean add = listaPacientes.add(paciente);
            if (add == true) {
                System.out.println("Paciente añadido correctamente.");
            } else {
                System.out.println("El paciente no ha podido ser añadido.");
            }

        } catch (IllegalArgumentException iae) {
            System.out.println(iae);
        }
    }

    private static int buscaPacienteDni(String dni) {
        int pos = -1;
        int contador = 0;
        Paciente pacienteaBuscar;

        // Número de elementos de la lista
        int numElementos = listaPacientes.size();

        // Recorrer la lista buscando si hay algún dnie igual. Iteramos mientras
        // no llegamos al final o bien hasta que encontremos el dni buscado, momento en que pos dejará de valor -1.
        while (pos == -1 && contador < numElementos) {
            pacienteaBuscar = listaPacientes.get(contador);
            if (dni.equals(pacienteaBuscar.getDni())) {
                pos = contador;
            }
            contador++;
        }
        return pos;
    }
    
    
    private static int buscaPacienteNombre(String nombre) {
        int pos = -1;
        int contador = 0;
        Paciente pacienteaBuscar;

        // Número de elementos de la lista
        int numElementos = listaPacientes.size();

        // Recorrer la lista buscando si hay algún dnie igual. Iteramos mientras
        // no llegamos al final o bien hasta que encontremos el dni buscado, momento en que pos dejará de valor -1.
        while (pos == -1 && contador < numElementos) {
            pacienteaBuscar = listaPacientes.get(contador);
            if (nombre.equals(pacienteaBuscar.getNombre())) {
                pos = contador;
            }
            contador++;
        }
        return pos;
    }
}
